//  引入axios文件包
import axios from 'axios'


// axios.defaults.baseURL = '/api'
axios.defaults.withCredentials = true

//  REQUEST 请求异常拦截
// axios.interceptors.request.use(config => {
//     //==========  所有请求之前都要执行的操作  ==============
//     return config;
// }, err => {
//     //==================  错误处理  ====================
//     Message.error({
//         message: '请求超时!'
//     });
//     return Promise.resolve(err);
// })

//  RESPONSE 响应异常拦截
// axios.interceptors.response.use(data => {
//     //==============  所有请求完成后都要执行的操作  ==================


//     // 第二种方式，仅对200和error状态处理
//     if (data.status && data.status == 200 && data.data.status == 'error') {

//         Notification({
//             title: "Connection Fail",
//             message: data.data.msg,
//             type: "error",
//             position: "bottom-right",
//             duration: 0
//         })

//         return;
//     }
//     return data;
// }, err => {
//     //==============  错误处理  ====================
//     if (err && err.response) {
//         switch (err.response.status) {
//             case 400:
//                 err.message = 'Request Error(400)';
//                 break;
//             case 401:
//                 err.message = 'Unauthorized(401)';
//                 break;
//             case 403:
//                 err.message = 'Access Denied(403)';
//                 break;
//             case 404:
//                 err.message = 'Request Error(404)';
//                 break;
//             case 408:
//                 err.message = 'Request Time Out(408)';
//                 break;
//             case 500:
//                 err.message = 'Server Error(500)';
//                 break;
//             case 501:
//                 err.message = 'Server not implemented(501)';
//                 break;
//             case 502:
//                 err.message = 'Network Issue(502)';
//                 break;
//             case 503:
//                 err.message = 'Service not available(503)';
//                 break;
//             case 504:
//                 err.message = 'Network Time Out(504)';
//                 break;
//             case 505:
//                 err.message = 'HTTP Version not support(505)';
//                 break;
//             default:
//                 err.message = `Connection Error(${err.response.status})!`;
//         }
//     } else {
//         err.message = 'Connection Fail!'
//     }

//     Notification({
//         title: "Connection Fail",
//         message: err.message,
//         type: "error",
//         position: "bottom-right",
//         duration: 0
//     })

//     return Promise.resolve(err);
// })


// POST 方法封装  (参数处理)
export const postRequest = (url: any, params: any) => {
    return new Promise((resolve, reject) => {
        axios({
            method: 'post',
            url: url,
            data: params,
            transformRequest: [function (data) {
                let ret = ''
                for (let it in data) {
                    ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
                }
                return ret
            }],
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
        }).then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}

// POST 方法封装  (文件上传)
export const uploadFileRequest = (url: any, params: any) => {
    return new Promise((resolve, reject) => {
        axios({
            method: 'post',
            url: url,
            data: params,
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        }).then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}

//  GET 方法封装
export const getRequest = (url: any, params: any) => {
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params: params
        }).then(res => {
            resolve(res) // 返回请求成功的数据 data
        }).catch(err => {
            reject(err)
        })
    })
}